package com.ruoyi.project.system.task.mapper;

import com.ruoyi.project.system.task.domain.Task;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

public interface TaskMapper {

    /**
     * 根据任务id删除任务
     *
     * @param taskId
     * @return
     */
    int deleteByPrimaryKey(Long taskId);

    /**
     * 添加任务
     *
     * @param task
     * @return
     */
    int insert(Task task);

    /**
     * 根据任务id查询任务
     *
     * @param taskId
     * @return
     */
    Task selectByPrimaryKey(Long taskId);

    /**
     * 修改任务
     *
     * @param task
     * @return
     */
    int updateByPrimaryKey(Task task);

    /**
     * 根据信息查询任务列表
     *
     * @param task
     * @return
     */
    List<Task> selectTaskList(Task task);

    /**
     * 批量删除任务
     *
     * @param taskIds id数组
     * @return
     */
    int deleteTaskByIds(String[] taskIds);

    /**
     * 根据条件查询接受的任务列表
     *
     * @param task 条件
     * @return
     */
    List<Task> selectAcceptList(Task task);

    /**
     * 根据条件查询下发的任务列表
     *
     * @param task
     * @return
     */
    List<Task> selectGrantList(Task task);

    /**
     * 更具任务id查询下发任务
     *
     * @param taskId
     * @return
     */
    Task selectGrantById(Long taskId);

    /**
     * 修改任务截止时间
     *
     * @param endtime
     * @return
     */
    int updateByEndTime(@Param("endtime") Date endtime, @Param("taskId") Long taskId);

    /**
     * 批量删除下发任务
     *
     * @param taskIds
     * @return
     */
    int deleteGrantByIds(String[] taskIds);

    /**
     * 根据任务id修改任务执行人
     *
     * @param executor 执行人编号
     * @param taskId   任务编号
     * @return
     */
    int updateByExecutor(@Param("executor") Integer executor, @Param("taskId") Long taskId);

    /**
     * 根基信息查询已完成的任务
     *
     * @param task
     * @return
     */
    List<Task> selectResultTaskList(Task task);

    /**
     * 添加任务成果信息
     * @param task
     * @return
     */
    int insertResult(Task task);

    /**
     * 修改任务成果信息
     * @return
     */
    int updateResultByPrimaryKey(Task task);
}